from django.shortcuts import render
from django.shortcuts import HttpResponse
from newsApp.models import MyNew
from django.db.models import Q # 用于对象的复杂查询，可以对关键字参数进行封装，从而更好地应用于多条件查询
from productsApp.models import Product
from django.views.decorators.cache import cache_page
# Create your views here.

'''
  (1)返回的是一个HttpResponse对象，可以设定任意的对象类型返回（字符串对象，json格式数据，迭代器对象等）

   (2)redirect:表示重定向到指定的一个地址，相当于返回的状态码是301.302（URL重定向）

   (3)render:表示的是返回指定配置模板中的静态资源，该操作必须配置settings中的模板路径
   render() 缺少 1 个必需的位置参数：'template_name'
'''
# python的硬编码方式HttpResponse
# def home(requset):
#     html = '<html><body>首页</body></html>'
#     return HttpResponse(html)

# Create your views here.
@cache_page(60 * 15) # 单位：秒数，这里指缓存 15 分钟
def home(request):# python的render函数模板渲染
  # 新闻展报
  # Q()函数结合~操作符进行过滤查询
    newList = MyNew.objects.all().filter(~Q(
          newType='通知公告')).order_by('-publishDate')
    postList = set() # QuerySet么，这里并没有其他的set
    postNum = 0
    for s in newList:
        if s.photo:
            postList.add(s)
            postNum += 1
        if postNum == 3:  # 只截取最近的3个展报
            break
    
    # 新闻列表
    if (len(newList)>7):
      newList = newList[0:7]

   
    # 通知公告
    noteList = MyNew.objects.all().filter(
        Q(newType='通知公告')).order_by('-publishDate')
    if (len(noteList) > 4):
        noteList = noteList[0:4]
    # 产品中心
    productList = Product.objects.all().order_by('-views')
    if (len(productList)>4):
      productList = productList[0:4]


      
    # 返回结果
    return render(request,'home.html',{
      "active_menu": "home",
      "postList":postList,
      "newList":newList,
      'noteList': noteList, # 之前通知公告模型没渲染到前端，缩略图就没有显示
      'productList':productList, # 
    })